package com.flamezebra.kotlin

// 函数参数分为3种：
// 1. 必传参数：最普通的参数，每次调用的时候必须给其一个实参。
// 2. 默认参数：在定义函数的时候，可以给形参一个默认值，这个默认值可以被实参传入的值覆盖，
//            并且这个被赋默认值的形参要么在参数列表的最右边，要么它右边所有形参都有默认值
// 3. 具名参数：在参数比较多的情况下，在调用函数时可以指定具体的参数名字，并赋值，不考虑参数列表的顺序。
fun main() {
    // 必传参数
    func1("Rick", 37)
    // 默认参数
    func2()
    // 具名参数
    func3(age = 16, name = "Emily", high = 155.4, weight = 50.0)
}


/**
 * 必传参数：name和age在调用func1函数时必须要给实参传入确定的值
 */
fun func1(name: String, age: Int): Unit {
    println("name: $name")
    println("age: $age")
}

/**
 * 默认参数：name和age在调用func2函数时可以传实参也可以不传，定义默认参数的形参要么在最右边，
 *         要么它右边的所有形参都要有默认值
 */
fun func2(name: String = "Jack", age: Int = 29) {
    println("name: $name")
    println("age: $age")
}

/**
 * 具名参数：在参数比较多的情况下，调用该函数时可以指定“参数名=值”这样的形式赋值，而忽略参数的顺序
 */
fun func3(name: String, age: Int, weight: Double, high: Double) {
    println("name: $name, age: $age, weight: $weight, high: $high")
}

